home *** CD-ROM | disk | FTP | other *** search
- (*
- KELD R. HANSEN
-
- > I need to *simulate* something like:
- > {$M 16384,0,0} {reduce heap}
- > Exec('c:\myprgm.exe',''); {run myprgm.exe}
- > {$M 16384,110000,110000} {restore heap}
-
- EXECUTE shrinks your programs memory allocation to the smallest possible value,
- then runs the program and then expands it back up again. Works in TP 6.0 and
- 7.0!
- *)
-
- USES
- DOS;
-
- TYPE
- STR127 = STRING[127];
-
- PROCEDURE ReallocateMemory(P : POINTER); ASSEMBLER;
- ASM
- MOV AX, PrefixSeg
- MOV ES, AX
- MOV BX, WORD PTR P+2
- CMP WORD PTR P,0
- JE @OK
- INC BX
-
- @OK:
- SUB BX, AX
- MOV AH, 4Ah
- INT 21h
- JC @X
- LES DI, P
- MOV WORD PTR HeapEnd,DI
- MOV WORD PTR HeapEnd+2,ES
-
- @X:
- END;
-
- FUNCTION EXECUTE(Name : PathStr ; Tail : STR127) : WORD; ASSEMBLER;
- ASM
- {$IFDEF CPU386}
- DB 66h
- PUSH WORD PTR HeapEnd
- DB 66h
- PUSH WORD PTR Name
- DB 66h
- PUSH WORD PTR Tail
- DB 66h
- PUSH WORD PTR HeapPtr
- {$ELSE}
- PUSH WORD PTR HeapEnd+2
- PUSH WORD PTR HeapEnd
- PUSH WORD PTR Name+2
- PUSH WORD PTR Name
- PUSH WORD PTR Tail+2
- PUSH WORD PTR Tail
- PUSH WORD PTR HeapPtr+2
- PUSH WORD PTR HeapPtr
- {$ENDIF}
- CALL ReallocateMemory
- CALL SwapVectors
- CALL DOS.EXEC
- CALL SwapVectors
- CALL ReallocateMemory
- MOV AX, DosError
- OR AX, AX
- JNZ @OUT
- MOV AH, 4Dh
- INT 21h
-
- @OUT:
- END;